iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Mobile Development

用Flutter Flame做遊戲!Live!系列 第 24

繼續講Joint...來做一輛「車子」吧!

  • 分享至 

  • xImage
  •  

Joint的種類還挺多的。
例如有用來「組成關節」的「GearJoint」。
或是用來「產生旋轉動畫」的「MotorJoint」。
或是「將物體A限制在物體B的軸上移動」的「PrismaticJoint」。
甚至是用來產生「滑鼠點擊移動」的「MouseJoint」!(要找時間好好研究「MouseJoint」。)

整體來說,這些Joint的JointDef使用方式幾乎都沒有個統一模式。
(產生JointDef然後丟給createJoint,這是比較穩定、且目前為止唯一能掌握的。)

其餘的特性還有「兩個或多個用來產生Joint關聯的的Component,其BodyDef設定並不需要相同。

例如「isSensor為false的Component可以和為true的Component產生Joint關聯」。

https://ithelp.ithome.com.tw/upload/images/20241004/20130496AD3OlUc9t7.png

圖片裡面,上方的三個圓球中的紅線空心球就是個「isSensor為false」的「Ball」,它跟其他兩個「Ball」產生了一個類似「汽車」的物件。(兩個「Ball」就像輪胎。)
(中間的圓是個「引力」方向的指針。)

但這產生了個問題就是「車身(Ball)可以穿透地板,變成車身在下、車輪在上的方式在地上跑。」
(什麼?「你」以為「車身是圓形」是個問題嗎?)

https://ithelp.ithome.com.tw/upload/images/20241004/20130496YjrFXAwg7S.png

可以在「FixtureDef」中設定「Density」,最後會用「Size x Density」的方式為每個物體產生重量,來讓物件保持「輪子在下、車身在上」的狀態。

(這個方法是我自己想隨機臨時想到的。所以...可能有更標準且推薦的做法。)

(這個正在想辦法將範例的「結果」放上網。)


上一篇
將多個Component連結起來的Joint
下一篇
用「拖曳物件到螢幕邊緣」來移動camera
系列文
用Flutter Flame做遊戲!Live!32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言